﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;

/// <summary>
/// Asp.Net içindeki Validator'ların kolay ve tek tip olarak kullanılmasını sağlayan bir sınıftır
/// </summary>
public class Dogrulama
{
    private const string ValidatorText = " Hata !";

    #region "RequiredFieldValidator"
    public static void MyRequiredFieldValidator(RequiredFieldValidator pValidator)
    {
        MyRequiredFieldValidator(pValidator, "", "");
    }

    public static void MyRequiredFieldValidator(RequiredFieldValidator pValidator, string pValidationGroup)
    {
        MyRequiredFieldValidator(pValidator, "pValidationGroup", "");
    }

    public static void MyRequiredFieldValidator(RequiredFieldValidator pValidator, string pValidationGroup, string pControlToValidate)
    {
        string msg = "Bu alan boş bırakılamaz !";

        pValidator.Text = ValidatorText;
        pValidator.ToolTip = msg;
        pValidator.ErrorMessage = msg;
        pValidator.Display = ValidatorDisplay.Dynamic;
        if (pControlToValidate != "") pValidator.ControlToValidate = pControlToValidate;
        if (pValidationGroup != "") pValidator.ValidationGroup = pValidationGroup;

    }
    # endregion

    #region "RangeValidator"
    public static void MyRangeValidator(RangeValidator pValidator, ValidationDataType pType, string pMinValue, string pMaxValue)
    {
        MyRangeValidator(pValidator, pType, pMinValue, pMaxValue, "", "");
    }

    public static void MyRangeValidator(RangeValidator pValidator, ValidationDataType pType, string pMinValue, string pMaxValue, string pValidationGroup)
    {
        MyRangeValidator(pValidator, pType, pMinValue, pMaxValue, "pValidationGroup", "");
    }

    public static void MyRangeValidator(RangeValidator pValidator, ValidationDataType pType, string pMinValue, string pMaxValue, string pValidationGroup, string pControlToValidate)
    {
        string msg = "Bu alana " + pMinValue + " ile " + pMaxValue + " arasında bir değer girilmelidir !";

        pValidator.Text = ValidatorText;
        pValidator.ToolTip = msg;
        pValidator.ErrorMessage = msg;
        pValidator.Display = ValidatorDisplay.Dynamic;
        if (pControlToValidate != "") pValidator.ControlToValidate = pControlToValidate;
        if (pValidationGroup != "") pValidator.ValidationGroup = pValidationGroup;

        pValidator.MinimumValue = pMinValue;
        pValidator.MaximumValue = pMaxValue;
        pValidator.Type = pType;

    }
    # endregion

    #region "RegularExpressionValidator"

    public const string EMail_Dogrulama = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
    public const string Url_Dogrulama = @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
    public const string SadeceRakam = @"^\d+$";
    public const string Desimal_Virgul_2Dijit= @"\d+(\,\d{1,2})?";
    public const string Tarih_Dogrulama = @"^\d{2}.\d{2}.\d{4}$";

    public static void MyRegularExpressionValidator(RegularExpressionValidator pValidator)
    {
        MyRegularExpressionValidator(pValidator, "", "", "");
    }

    public static void MyRegularExpressionValidator(RegularExpressionValidator pValidator, string pValidationExpression)
    {
        MyRegularExpressionValidator(pValidator, pValidationExpression, "", "");
    }

    public static void MyRegularExpressionValidator(RegularExpressionValidator pValidator, string pValidationExpression, string pValidationGroup)
    {
        MyRegularExpressionValidator(pValidator, pValidationExpression, pValidationGroup, "");
    }

    public static void MyRegularExpressionValidator(RegularExpressionValidator pValidator, string pValidationExpression, string pValidationGroup, string pControlToValidate)
    {
        string msg = "";
        switch (pValidationExpression)
        {
            case EMail_Dogrulama:
                msg = "Girilen değer e-posta formatına uygun değil veya Türkçe karakter kullanılıyor !"; break;
            case Url_Dogrulama:
                msg = "Girilen değer internet adresi formatına uygun değil ! Adres, http:// veya https:// ile başlamalıdır ve Türkçe karakter içermemelidir."; break;
            case SadeceRakam:
                msg = "Bu alana sadece rakam girilebilir !"; break;
            case Desimal_Virgul_2Dijit:
                msg = "Sayı formatı hatalı ! Ondalık ayırım için virgül kullanabilir ve virgülden sonra en fazla 2 rakam yazılabilir. Örnek: 125,35"; break;
            case Tarih_Dogrulama:
                msg = "Tarih formatı doğru bir şekilde girilmedi ! Doğru Format: gg.aa.yyyy Örnek: 25.09.2008"; break;
            default:
                msg = "Girilen değer formata uygun değil !"; break;
        }

        pValidator.Text = ValidatorText;
        pValidator.ToolTip = msg;
        pValidator.ErrorMessage = msg;
        pValidator.Display = ValidatorDisplay.Dynamic;
        if (pControlToValidate != "") pValidator.ControlToValidate = pControlToValidate;
        if (pValidationGroup != "") pValidator.ValidationGroup = pValidationGroup;

        if (pValidationExpression != "") pValidator.ValidationExpression = pValidationExpression;

    }
    #endregion

    #region "CompareValidator"

    public static void MyCompareValidator(CompareValidator pValidator, ValidationCompareOperator pOperator, ValidationDataType pType, string pLableToValidate, string pLableToCompare)
    {
        MyCompareValidator(pValidator, pOperator, pType, pLableToValidate, pLableToCompare, "", "", "", "");

    }

    public static void MyCompareValidator(CompareValidator pValidator, ValidationCompareOperator pOperator, ValidationDataType pType, string pLableToValidate, string pLableToCompare, string pValidationGroup, string pControlToValidate, string pControlToCompare)
    {
        MyCompareValidator(pValidator, pOperator, pType, pLableToValidate, pLableToCompare, pValidationGroup, pControlToValidate, pControlToCompare, "");

    }

    public static void MyCompareValidator(CompareValidator pValidator, ValidationCompareOperator pOperator, ValidationDataType pType, string pLableToValidate, string pLableToCompare, string pValidationGroup, string pControlToValidate, string pControlToCompare, string pValueToCompare)
    {
        string prefix = pLableToValidate + " alanına girilen değer ";
        string sufix = pLableToCompare + " alanına girilen ";
        if (pValueToCompare != "") sufix = "belirlenen ";

        string msg = "";
        switch (pOperator)
        {
            case ValidationCompareOperator.Equal:
                msg = prefix + "ile" + sufix + "değerler aynı olmalıdır !";
                break;
            case ValidationCompareOperator.GreaterThan:
                msg = prefix + sufix + "değerden büyük olmalıdır !";
                break;
            case ValidationCompareOperator.GreaterThanEqual:
                msg = prefix + sufix + "değerden büyük ya da ona eşit olmalıdır !";
                break;
            case ValidationCompareOperator.LessThan:
                msg = prefix + sufix + "değerden küçük olmalıdır !";
                break;
            case ValidationCompareOperator.LessThanEqual:
                msg = prefix + sufix + "değerden küçük ya da ona eşit olmalıdır !";
                break;
            case ValidationCompareOperator.NotEqual:
                msg = prefix + "ile" + sufix + "değerler aynı olmamalıdır !";
                break;
            case ValidationCompareOperator.DataTypeCheck:
                msg = prefix + "ile" + sufix + "değerlerin veri tipi aynı olmalıdır !";
                break;
        }

        if (pValueToCompare != "") msg = msg + " Belirlenen Değer: " + pValueToCompare;

        pValidator.Text = "* Hata !";
        pValidator.ToolTip = msg;
        pValidator.ErrorMessage = msg;
        pValidator.Display = ValidatorDisplay.Dynamic;
        if (pControlToValidate != "") pValidator.ControlToValidate = pControlToValidate;
        if (pValidationGroup != "") pValidator.ValidationGroup = pValidationGroup;

        pValidator.Operator = pOperator;
        pValidator.Type = pType;
        pValidator.ControlToCompare = pControlToCompare;
        pValidator.ValueToCompare = pValueToCompare;

    }

    #endregion

    #region "ValidationSummary"

    public static void MyValidationSummary(ValidationSummary pValidator, string pValidationGroup)
    {
        pValidator.ValidationGroup = pValidationGroup;
        pValidator.HeaderText = "Veri Giriş Hatası !  Hata mesajları yukarıdan aşağıya sırasıyla alttaki gibidir:";
        pValidator.DisplayMode = ValidationSummaryDisplayMode.BulletList;
        pValidator.ShowMessageBox = false;
        pValidator.ShowSummary = true;
    }

    #endregion

    // "DIGER DOGRULAMA METHODLARI"

    #region "TextBoxMaxLengthValidator"
    public static string MyTextBoxMaxLengthValidator(TextBox pTextBox, string pLableToValidate)
    {
        string txt = "";
        if (pTextBox.Text.Length > pTextBox.MaxLength)
        {
            txt = pLableToValidate + " alanına en fazla " + pTextBox.MaxLength + " karakter girilebilir ! Siz " + pTextBox.Text.Length + " adet karakter girdiniz.";
        }
        return txt;
    }
    #endregion

   

}
